package reflect;

import java.lang.reflect.Method;
/**
 * 反射机制访问私有成员
 */
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        //不可以在类的外部访问一个类的私有成员
        //person.hehe();

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        /*
        Class对象中的
        getMethod()方法，仅能获取到公开方法（包括从超类集成的）

        Class提供了一些列getDeclaredXXX()的方法,它们都可以获取本类自己定义的成员
            包括私有成员

        getDeclaredMethod()获取本类定义的方法，包括私有方法
         */
        //Method method = cls.getMethod("hehe");
        Method method = cls.getDeclaredMethod("hehe");
        method.setAccessible(true);//强行打开访问权限
        method.invoke(obj);
        method.setAccessible(false);
    }
}
